﻿using System.Collections.Generic;
using Wedn.Model.Data;

namespace Wedn.Interface.DAL
{
    /// <summary>
    /// 选项表操作类接口
    /// </summary>
    public interface IOption
    {
        /// <summary>
        /// 创建选项表操作对象
        /// </summary>
        /// <returns>选项表操作对象</returns>
        IOption CreateDAO;
		
        #region 添加记录
        /// <summary>
        /// 向选项设置表中插入一行数据, 返回执行结果受影响行数
        /// </summary>
        /// <param name="option">要插入的选项对象</param>
        /// <returns>执行结果受影响行数</returns>
        int Insert(Option option);
        #endregion

        #region 删除记录

        #region 删除一条记录
        /// <summary>
        /// 根据选项ID删除对应的一条选项记录, 返回执行结果受影响行数
        /// </summary>
        /// <param name="id">要删除的选项ID</param>
        /// <returns>执行结果受影响行数</returns>
        int Delete(int id); 
        #endregion

        #region 删除多条记录
        /// <summary>
        /// 根据选项ID数组删除对应的多条选项记录, 返回执行结果受影响行数
        /// </summary>
        /// <param name="ids">要删除的选项ID数组</param>
        /// <returns>执行结果受影响行数</returns>
        int Delete(int[] ids);
        #endregion

        #endregion

        #region 更新记录

        #region 根据选项名称更新对应选项值
        /// <summary>
        /// 根据选项名称更新对应的选项值, 返回执行结果受影响行数
        /// </summary>
        /// <param name="name">要修改的选项名称</param>
        /// <param name="value">要更新的值</param>
        /// <returns>执行结果受影响行数</returns>
        int Update(string name, string value);
        #endregion

        #region 更新一个完整选项对象
        /// <summary>
        /// 更新一个完整选项对象, 返回执行结果受影响行数
        /// </summary>
        /// <param name="option">要更新的对象</param>
        /// <returns>执行结果受影响行数</returns>
        int Update(Option option);
        #endregion

        #endregion

        #region 选取记录

        #region 选取表中主键最大值
        /// <summary>
        /// 获取表中主键最大值, 返回主键最大值
        /// </summary>
        /// <returns>主键最大值</returns>
        int SelectMaxId();
        #endregion

        #region 是否存在选项名称
        /// <summary>
        /// 检查表中是否已经存在该选项名称, 返回一个布尔值, 存在则为True; 不存在则为False
        /// </summary>
        /// <param name="name">要确定的选项名称</param>
        /// <returns>存在返回True; 不存在返回False</returns>
        bool Exists(string name);
        #endregion

        #region 选取所有选项信息
        /// <summary>
        /// 取出选项表中所有选项设置信息, 返回选项对象集合
        /// </summary>
        /// <returns>所有选项对象集合</returns>
        List<Option> SelectOptionList();
        #endregion

        #region 根据选项名称选取选项值
        /// <summary>
        /// 根据选项名称选取选项表中对应的选项值, 返回对应选项值, 不存在则返回NULL
        /// </summary>
        /// <param name="name">选项名称</param>
        /// <returns>对应的选项值</returns>
        object SelectValue(string name);
        #endregion

        #region 根据选项ID选取所有选项对象
        /// <summary>
        /// 根据选项ID选取对应的选项对象, 返回一个选项对象, 不存在则返回NULL
        /// </summary>
        /// <param name="id">选项ID</param>
        /// <returns>指定ID的选项对象</returns>
        Option SelectOption(int id);
        #endregion

        #endregion

    }
}
